package com.ruoyi.business.tool;

import com.ruoyi.business.VO.AcLeaseInfoVO;
import com.ruoyi.business.mapper.AcLeaseInfoMapper;
import com.ruoyi.business.service.impl.AcLeaseInfoServiceImpl;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.framework.web.domain.server.Sys;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Random;

@Service
@Component
public class LeaseInfoTool {

    @Autowired
    private AcLeaseInfoMapper acLeaseInfoMapper;

    @Autowired
    private AcLeaseInfoServiceImpl acLeaseInfoService;
    /**
     * 随机生成租赁编号
     * 格式：yyyyMMddXXX
     * **/
    public String generateRandomNumber() {
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();
        // 定义日期格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
        // 格式化当前日期为 yyyyMMdd 格式
        String result = currentDate.format(formatter);
        Random random = new Random();
        while (true) {
            // 生成一个三位数的随机数，范围从 0 到 999
            int randomThreeDigitNumber = random.nextInt(1000);
            // 使用 String.format 确保数字始终为三位数，包括前导零
            String formattedNumber = String.format("%03d", randomThreeDigitNumber);
            int count = acLeaseInfoMapper.matchLeaseInfoByLeaseCode(result+formattedNumber);
            if(0 == count) {
                result = result + formattedNumber;
                break;
            }
        }
        return result;
    }

    /**
     * 校验租赁截止时间
     * 1、当租赁截止时间小于当天时间，为租赁到期
     * 2、当租赁截止时间大于当天时间，为租赁未到期
     *
     * @param leaseId 租赁id
     * @return 结果
     * **/
    public boolean cheackLeaseDate(Long leaseId) {
        AcLeaseInfoVO checkAcLeaseInfo = acLeaseInfoMapper.selectAcLeaseInfoByleaseId(leaseId);
        LocalDate today = LocalDate.now();
        LocalDate leaseEndDate = convertToLocalDate(checkAcLeaseInfo.getLeaseEndDate());
        // 比较leaseEndDate和today，如果leaseEndDate 大于today，返回 false
        if (leaseEndDate.isAfter(today)) {
            return false;
        } else {  // leaseEndDate小于today
            return true;
        }
    }

    // Date 转换为LocalDate
    public static LocalDate convertToLocalDate(Date date) {
        return date.toInstant()
                .atZone(java.time.ZoneId.systemDefault())
                .toLocalDate();
    }

    /**
     * 租赁状态定时器
     * 每天 00：00：00秒时执行该定时器
     * 判断租赁截止时间与当天时间
     * 当租赁截止时间小于当天时间时，租赁状态为到期
     * **/
//    @Scheduled(cron = "0 0 0 * * ?")  // 每天00：00：00执行
//    @Scheduled(cron = "0/10 * * * * ?")  // 每10秒执行
    public void updateAcLeaseInfoByCurrentDate() {
        acLeaseInfoService.updateAcLeaseInfoByCurrentDate();
    }



    /**
     *
     * 定时任务更新租赁状态
     * */

        @Scheduled(cron = "0/30 * * * * ?")  // 每10秒执行
        @Scheduled(cron = "0 0 0 * * ?")  // 每天00：00：00执行
        public void updateAcLeaseInfoByDate() {
        acLeaseInfoService.updateAcLeaseByCurrentDate();
    }
}
